package old.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;


//@Entity
@Table(name = "tb_pessoa", schema="teste")
@NamedQueries({ @NamedQuery(name = "listarPessoas", query = "from Pessoa ") , @NamedQuery(name = "listarPessoasSemCarro", query = "FROM Pessoa pessoa where pessoa.veiculo = null"),
	@NamedQuery(name = "pesquisarNome", query = "from Pessoa pessoa where pessoa.nomePessoa = :nome") 	
})
public class Pessoa implements Serializable{
	private static final long serialVersionUID = -4407697043051125440L;
	
	@Id
	@SequenceGenerator(name = "PESSOA_ID_SEQ", sequenceName = "tb_pessoa_id_pessoa_seq", schema="teste")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "PESSOA_ID_SEQ")
	@Column(name = "id_pessoa")
	private Integer idPessoa;
	
	@Column(name = "nome_pessoa", nullable = false, length = 128)
	@NotNull
	private String nomePessoa;
	
	@Column(name="tipo_pessoa")
	private TipoPessoa tipo;
	
	@OneToOne(fetch=FetchType.LAZY)
	@JoinColumn(name = "id_veiculo")  
	private Veiculo veiculo;

	
	public enum TipoPessoa {
		FISICA, JURIDICA
	}
	
	
	public Integer getIdPessoa() {
		return idPessoa;
	}

	public void setIdPessoa(Integer idPessoa) {
		this.idPessoa = idPessoa;
	}

	public String getNomePessoa() {
		return nomePessoa;
	}

	public void setNomePessoa(String nomePessoa) {
		this.nomePessoa = nomePessoa;
	}

	public Veiculo getVeiculo() {
		return veiculo;
	}

	public void setVeiculo(Veiculo veiculo) {
		this.veiculo = veiculo;
	}
	
	public void fisica() {
		this.tipo = TipoPessoa.FISICA;
	}
	
	public void juridica() {
		this.tipo = TipoPessoa.JURIDICA;
	}
	
}
